// client/utils/request.js


// 从环境变量中读取 base url 和 port
// import.meta.env
// const BASE_URL =  'http://localhost' 
// const BASE_URL =  'http://192.168.133.114' 
// const API_PORT = 8000

const BASE_URL =  'http://192.168.133.203' 
const API_PORT = 3000


const API_PRIFIX =  '/api/v1'

// 拼接完整基础地址（带端口）
const getBaseUrl = (prefix = API_PRIFIX) => {
  // 如果有端口号，拼接上
  const portWithSlash = API_PORT ? `:${API_PORT}` : ''
  // 如果有前缀路径，拼接在路径后
  const prefixWithSlash = prefix ? `/${prefix}` : ''

  return `${BASE_URL}${portWithSlash}${prefixWithSlash}`
}

// 默认配置
const defaultOptions = {
  method: 'GET',
  header: {
    'content-type': 'application/json'
  },
  showLoading: true,
  loadingTitle: '加载中...'
}

// 主请求方法
function request(url = '', data = {}, prefix = '', options = {}) {
  const finalUrl = `${getBaseUrl(prefix)}${url}`
  const config = Object.assign({}, defaultOptions, options)

  return new Promise((resolve, reject) => {
    uni.request({
      url: finalUrl,
      data,
      method: config.method,
      header: config.header,
      success: (res) => {
        if (config.showLoading) {
          uni.hideLoading()
        }

        // 处理 HTTP 层错误
        if (res.statusCode >= 400) {
          uni.showToast({ title: '网络异常', icon: 'none' })
          reject(new Error(`HTTP Error: ${res.statusCode}`))
          return
        }
        resolve(res.data)
      },
      fail: (err) => {
        if (config.showLoading) {
          uni.hideLoading()
        }
        uni.showToast({ title: '网络异常', icon: 'none' })
        reject(err)
      }
    })
  })
}

// GET/POST 快捷方法
export const get = async (url, prefix = '', options = {}) => {
  const res = await request(url, {}, prefix, { ...options, method: 'GET' })
  return res
}

export const post = async (url, data, prefix = '', options = {}) => {
  const res = await request(url, data, prefix, { ...options, method: 'POST' })
  return res
}

// 保留原始默认导出（兼容旧用法）
export default {
  get,
  post,
  request
}